// 220106 2008

/*
模块系统
模块是Node.js 应用程序的基本组成部分，文件和模块是一一对应的。
换言之，一个 Node.js 文件就是一个模块，这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

Node.js 提供了 exports 和 require 两个对象，
其中 exports 是模块公开的接口，require 用于从外部获取一个模块的接口，即所获取模块的 exports 对象。
*/

var hello = require('./mhello.js');

// 模块信息
console.log(hello);

// 220107

// 使用模块的公开内容
hello.world();
console.log('---');
console.log(hello.PI_7);
console.log('END.21');

var h107 = require('./hello107.js');
h24 = new h107();

console.log(h24);
h24.sayHello();

h24.setName('Shenzhen');
console.log(h24);
h24.sayHello();

console.log('END.33');

/*
exports 和 module.exports 的使用
如果要对外暴露属性或方法，就用 exports 就行，要暴露对象(类似class，包含了很多属性和方法)，就用 module.exports。
TODO

不建议同时使用 exports 和 module.exports。
如果先使用 exports 对外暴露属性或方法，再使用 module.exports 暴露对象，会使得 exports 上暴露的属性或者方法失效。
原因在于，exports 仅仅是 module.exports 的一个引用。
TODO
*/
